#include "bilbao/util/Status.h"

namespace bilbao
{
	namespace util
	{
		//--------------------------------------------------------------------------------
		Status::Status(void)
		{

		}
		//--------------------------------------------------------------------------------
		Status::~Status(void)
		{

		}
		//--------------------------------------------------------------------------------
		StatusData Status::queryEquipmentStatus( void )
		{
			StatusData aaaaa;

			// Irão compor a mensagem de retorno para o PAF
			String NSERIE;
			//Dados da rede - Inicio
			String TIPO_LAN;
			String LAN_IP;
			String LAN_MAC;
			String LAN_MASK;
			String LAN_GW;
			String LAN_DNS_1;
			String LAN_DNS_2;
			String STATUS_LAN;
			//Dados da rede - Fim
			String NIVEL_BATERIA;
			//
			String MT_TOTAL;
			String MT_USADA;
			//
			String DH_ATUAL;
			String VER_SB;
			String VER_LAYOUT;
			String ULTIMO_CFE;
			String LISTA_INICIAL;
			String LISTA_FINAL;
			String DH_CFE;
			String DH_ULTIMA;
			//
			String CERT_EMISSAO;
			String CERT_VENCIMENTO;
			//
			String ESTADO_OPERACAO;

			Config* config = Config::getInstance();
			//TODO: pegar as informações dos locais corretos.
			//pegando o numero de serie do equipamento
			NSERIE = config->getSerialNumber();

			// usando comandos linux
			TIPO_LAN = "DHCP";
			LAN_IP = "192.168.010.100";
			LAN_MAC = "00:0C:41:82:25:E8";
			LAN_MASK = "255.255.255.00";
			LAN_GW = "192.168.010.001";
			LAN_DNS_1 = "192.168.010.001";
			LAN_DNS_2 = "192.168.010.001";
			STATUS_LAN = "CONECTADO";

			// TODO: definir o que é baixo alto ou medio
			//NIVEL_BATERIA = system("cat /proc/acpi/battery/BAT1/info | grep last full capacity:");
			NIVEL_BATERIA = "ALTO";
			MT_TOTAL = "100 Mbyte";
			MT_USADA = "35 Mbyte";

			// pegando timestamp
			util::Timing::getTimeStamp(DH_ATUAL);

			// TODO: peret += EEEE + "|" + mensagem + "|";gar do banco a versao do software basico
			VER_SB = "000001";

			// TODO: pegar do banco a versao do layout
			VER_LAYOUT = "1.01";

			// TODO: pegar o numero do ultimo cfe emitido
			ULTIMO_CFE = "32008889000000089";

			// TODO: pegar numero sequencial da lista local inicial
			LISTA_INICIAL = "32008889000000075";

			// TODO: pegar numero sequencial da lista local final
			LISTA_FINAL = "32008889000000089";

			// TODO: pegar no log a data da ultima transmissao de cfe
			DH_CFE = "20111021170022";

			// TODO: pegar no log a data da ultima comunicação com SEFAZ
			DH_ULTIMA = "20111021170022";

			// TODO: pegar data de emissao do certificado instalado
			CERT_EMISSAO = "20111020";

			//TODO: pegar data de vencimento do certificado
			CERT_VENCIMENTO = "20121020";

			//TODO: pegar estado de operação do equipamento
			// 0 = DESBLOQUEADO /  1 = BLOQUEIO SEFAZ
			// 2 = BLOQUEIO CONTRIBUINTE / 3 = BLOQUEIO AUTÔNOMO
			ESTADO_OPERACAO = "0";

			//TODO: montar a String

			aaaaa.NSERIE = NSERIE;
			aaaaa.TIPO_LAN = TIPO_LAN;
			aaaaa.LAN_IP = LAN_IP;
			aaaaa.LAN_MAC = LAN_MAC;
			aaaaa.LAN_MASK = LAN_MASK;
			aaaaa.LAN_GW = LAN_GW;
			aaaaa.LAN_DNS_1 = LAN_DNS_1;
			aaaaa.LAN_DNS_2 = LAN_DNS_2;
			aaaaa.STATUS_LAN = STATUS_LAN;
			aaaaa.NIVEL_BATERIA = NIVEL_BATERIA;
			aaaaa.MT_TOTAL = MT_TOTAL;
			aaaaa.MT_USADA = MT_USADA;
			aaaaa.DH_ATUAL = DH_ATUAL;
			aaaaa.VER_SB = VER_SB;
			aaaaa.VER_LAYOUT = VER_LAYOUT;
			aaaaa.ULTIMO_CFE = ULTIMO_CFE;
			aaaaa.LISTA_INICIAL = LISTA_INICIAL;
			aaaaa.LISTA_FINAL = LISTA_FINAL;
			aaaaa.DH_CFE = DH_CFE;
			aaaaa.DH_ULTIMA = DH_ULTIMA;
			aaaaa.CERT_EMISSAO = CERT_EMISSAO;
			aaaaa.CERT_VENCIMENTO = CERT_VENCIMENTO;
			aaaaa.ESTADO_OPERACAO = ESTADO_OPERACAO;

			return aaaaa;
		}
		//--------------------------------------------------------------------------------
		String Status::queryProcessingState(void)
		{
			//TODO
			return 0;
		}
		//--------------------------------------------------------------------------------
		//--------------------------------------------------------------------------------
	}
}

